#include <linux/uaccess.h>
#include <linux/fs.h>
#include <linux/stat.h>
#include <linux/cdev.h>
#include <linux/io.h>
#include <linux/gpio.h>
#include <linux/gpio/machine.h>
#include <linux/of.h>
#include <linux/of_gpio.h>
#include <linux/slab.h>
#include <linux/irq.h>
#include <linux/mutex.h>
#include <linux/interrupt.h>
#include <linux/bug.h>			/* For BUG_ON.  */
#include <linux/cpu.h>
#include <linux/init.h> /* Needed for the macros */
#include <linux/kernel.h> /* Needed for pr_info() */
#include <linux/module.h> /* Needed by all modules */
#include <linux/delay.h>
#include <linux/smp.h>
#include <linux/kernel_stat.h>
#include <linux/sched.h>
#include <linux/percpu-defs.h>
#include <linux/wait.h>
#include <linux/gpio/driver.h>
#include <linux/atomic.h>
#include <linux/platform_device.h>
#include <linux/poll.h>
#include <linux/kfifo.h>
#include <linux/workqueue.h>
#include <linux/notifier.h>

BLOCKING_NOTIFIER_HEAD(list);

int my_register_client(struct notifier_block *nb) {
	blocking_notifier_chain_register(&list, nb);
	return 0;
}
EXPORT_SYMBOL(my_register_client);

int my_unregister_client(struct notifier_block *nb) {
	blocking_notifier_chain_unregister(&list, nb);
	return 0;
}
EXPORT_SYMBOL(my_unregister_client);

int my_notifier_call_chain(unsigned long val, void *v) {
	blocking_notifier_call_chain(&list, val, v);
	return 0;
}
EXPORT_SYMBOL(my_notifier_call_chain);

static __init int my_init(void) {
		pr_err("my_init\n");
return 0;
}

static void __exit my_exit(void) {


}

module_init(my_init);
module_exit(my_exit);

MODULE_LICENSE("GPL");
MODULE_AUTHOR("Andy");
MODULE_DESCRIPTION("andy one-key driver");
MODULE_ALIAS("one-key");
